package com.eqs.enterprisequestionnaire.controller;

import com.eqs.enterprisequestionnaire.model.pojo.Questionnaire;
import com.eqs.enterprisequestionnaire.result.R;
import com.eqs.enterprisequestionnaire.service.QuestionnaireService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;


@RestController
@RequestMapping("/questionnaire")
public class QuestionnaireController {
    @Autowired
    private QuestionnaireService questionnaireService;
    @PostMapping("/create")
    public R<Questionnaire> createQuestionnaire(@RequestParam Integer authorId,@RequestParam String title,@RequestParam String description) {
        questionnaireService.insertQuestionnaire(authorId,title,description);
        return R.success(questionnaireService.getQuestionnaireAfterCreat(authorId,title));
    }
    @GetMapping("/get/{id}")
    public R<Questionnaire> getQuestionnaireById(@PathVariable Integer id) {
        Questionnaire questionnaire = questionnaireService.selectByQuestionnaireId(id);
        if (questionnaire != null) {
            return R.success(questionnaire);
        } else {
            return R.error("Not Found Questionnaire");
        }
    }
    @PutMapping("/update")
    public R<String> updateQuestionnaire(@RequestBody Questionnaire questionnaire) {
        try {
            questionnaireService.updateQuestionnaire(questionnaire);
            return R.success("Questionnaire updated successfully");
        } catch (RuntimeException e) {
            return R.error("Update failed");
        }
    }
    @DeleteMapping("/delete/{id}")
    public R<String> deleteQuestionnaire(@PathVariable Integer id) {
        questionnaireService.deleteQuestionnaire(id);
        return R.success("Questionnaire deleted successfully");
    }
    @PutMapping("/updateDeadline")
    public R<String> updateDeadline(@RequestParam Integer questionnaireId, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime newDeadline) {
        try {
            questionnaireService.updateDeadline(questionnaireId, newDeadline);
            return R.success("Deadline updated successfully");
        } catch (RuntimeException e) {
            return R.error("Failed update");
        }
    }
    @PutMapping("/updateStatus/{questionnaireId}")
    public R<String> updateQuestionnaireStatus(@PathVariable Integer questionnaireId) {
        try {
            questionnaireService.updateQuestionnaireStatus(questionnaireId);
            return R.success("Status updated successfully");
        } catch (RuntimeException e) {
            return R.error("Failed to update status");
        }
    }
    @GetMapping("/responseCount/{questionnaireId}")
    public R<Integer> getQuestionnaireResponseCount(@PathVariable Integer questionnaireId) {
        int count = questionnaireService.getQuestionnaireResponseCount(questionnaireId);
        return R.success(count);
    }
    @PostMapping("/submitWholeQuestionnaire")
    public R submitWholeQuestionnaire(@RequestBody Questionnaire questionnaire){
        return R.success(questionnaireService.submitWholeQuestionnaire(questionnaire));
    }
    @PutMapping("/updateWholeQuestionnaire")
    public R updateWholeQuestionnaire(@RequestBody Questionnaire questionnaire){
        return R.success(questionnaireService.updateWholeQuestionnaire(questionnaire));
    }
    @DeleteMapping("/deleteWholeQuestionnaire/{questionnaireId}")
    public R deleteWholeQuestionnaire(@PathVariable Integer questionnaireId){
        questionnaireService.deleteWholeQuestionnaire(questionnaireId);
        return R.success("删除成功，无对象返回");
    }
}
